package day18_Reflection.demo05_Function;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/*
Class类中用与获取成员变量的方法
Method[] getMethods();获取所有公共成员方法(包括继承)的数组
Method[] getDeclaredMethods();获取所有成员方法(不包括继承)的数组
Method[] getMethod(String name,Class<?>... parameterTypes);返回单个公共成员方法的对象
Method[] getDeclaredMethod(String name,Class<?>... parameterTypes);返回单个成员方法的对象

Method类中用与调用成员方法的方法
Object invoke(Object obj,Object...args):调用obj对象的成员方法参数为args,返回值为Object
注意:通过反射私有化成员方法不能直接调用需要通过setAccessible方法
 */
public class Test {
    public static void main(String[] args) throws Exception{
        Class<User> userClass = User.class;
        //获取所有公共成员方法(包括继承)的数组
        Method[] methods = userClass.getMethods();
        for (Method method : methods) {
            System.out.println(method);
        }
        System.out.println("--------");
        //获取所有成员方法(不包括继承)的数组
        Method[] declaredMethods = userClass.getDeclaredMethods();
        for (Method declaredMethod : declaredMethods) {
            System.out.println(declaredMethod);
        }
        System.out.println("--------");
        //返回单个公共成员方法的对象
        Method method = userClass.getMethod("show", int.class, int.class);
        System.out.println(method);
        Method show = userClass.getMethod("show");
        System.out.println(show);
        System.out.println("--------");
        //返回单个成员方法的对象
        Method test = userClass.getDeclaredMethod("test", int.class);
        System.out.println(test);
    }
}
